package com.example.service;

import com.example.dao.UserDao;
import com.example.model.User;

/**
 * 认证服务类
 * 演示业务逻辑层与数据访问层的分离
 */
public class AuthService {

    private final UserDao userDao;

    /**
     * 构造函数注入UserDao
     * 
     * @param userDao 用户数据访问对象
     */
    public AuthService(UserDao userDao) {
        this.userDao = userDao;
    }

    /**
     * 用户登录认证
     * 
     * @param username 用户名
     * @param password 密码
     * @return 认证成功返回true，失败返回false
     */
    public boolean authenticate(String username, String password) {
        // 参数验证
        if (username == null || username.trim().isEmpty()) {
            return false;
        }
        if (password == null || password.trim().isEmpty()) {
            return false;
        }

        // 查询用户
        User user = userDao.findByUsername(username);

        // 验证用户是否存在且密码正确
        if (user != null && password.equals(user.getPassword())) {
            return true;
        }

        return false;
    }

    /**
     * 用户注册
     * 
     * @param username 用户名
     * @param password 密码
     * @param email    邮箱
     * @return 注册成功返回true，失败返回false
     */
    public boolean register(String username, String password, String email) {
        // 参数验证
        if (username == null || username.trim().isEmpty()) {
            return false;
        }
        if (password == null || password.trim().isEmpty()) {
            return false;
        }
        if (email == null || email.trim().isEmpty()) {
            return false;
        }

        // 检查用户名是否已存在
        User existingUser = userDao.findByUsername(username);
        if (existingUser != null) {
            return false; // 用户名已存在
        }

        // 创建新用户
        User newUser = new User();
        newUser.setUsername(username);
        newUser.setPassword(password);
        newUser.setEmail(email);

        // 保存用户
        try {
            userDao.saveUser(newUser);
            return true;
        } catch (Exception e) {
            e.printStackTrace();
            return false;
        }
    }

    /**
     * 获取用户信息
     * 
     * @param username 用户名
     * @return 用户对象，如果不存在返回null
     */
    public User getUserInfo(String username) {
        if (username == null || username.trim().isEmpty()) {
            return null;
        }

        return userDao.findByUsername(username);
    }

    /**
     * 更新用户密码
     * 
     * @param username    用户名
     * @param oldPassword 旧密码
     * @param newPassword 新密码
     * @return 更新成功返回true，失败返回false
     */
    public boolean updatePassword(String username, String oldPassword, String newPassword) {
        // 参数验证
        if (username == null || username.trim().isEmpty()) {
            return false;
        }
        if (oldPassword == null || oldPassword.trim().isEmpty()) {
            return false;
        }
        if (newPassword == null || newPassword.trim().isEmpty()) {
            return false;
        }

        // 验证用户和旧密码
        User user = userDao.findByUsername(username);
        if (user == null || !oldPassword.equals(user.getPassword())) {
            return false;
        }

        // 更新密码
        user.setPassword(newPassword);
        try {
            userDao.updateUser(user);
            return true;
        } catch (Exception e) {
            e.printStackTrace();
            return false;
        }
    }
}